home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-04-03 | 17.9 KB | 583 lines | [TEXT/MPS ] |
- //----------------------------------------------------------------------------------------
- // UDesignator.cp
- // Copyright © 1984-96 by Apple Computer, Inc. All rights reserved.
- //----------------------------------------------------------------------------------------
-
- #ifndef __UDESIGNATOR__
- #include "UDesignator.h"
- #endif
-
- // MacApp
-
- #ifndef __UCOREUTILITIES__
- #include "UCoreUtilities.h"
- #endif
-
- #ifndef __UFAILURE__
- #include "UFailure.h"
- #endif
-
- #ifndef __UGEOMETRY__
- #include "UGeometry.h"
- #endif
-
- #ifndef __UMACAPPGLOBALS__
- #include "UMacAppGlobals.h"
- #endif
-
- #ifndef __UMACAPPUTILITIES__
- #include "UMacAppUtilities.h"
- #endif
-
- #ifndef __UMEMORY__
- #include "UMemory.h"
- #endif
-
- #ifndef __USTREAM__
- #include "UStream.h"
- #endif
-
- // Toolbox
-
- #ifndef __AEREGISTRY__
- #include <AERegistry.h>
- #endif
-
- //========================================================================================
- // CLASS TDesignator
- //========================================================================================
- #undef Inherited
- #define Inherited TObject
-
- #pragma segment MADesignatorNonRes
- MA_DEFINE_CLASS_M2(TDesignator, Inherited, MScriptableObject);
-
- //----------------------------------------------------------------------------------------
- // TDesignator: Empty constructor to satisfy the compiler.
- //----------------------------------------------------------------------------------------
- #pragma segment ConstructorRes
-
- TDesignator::TDesignator()
- : MScriptableObject(cSelection)
- {
- } // TDesignator::TDesignator
-
- //----------------------------------------------------------------------------------------
- // TDesignator destructor
- //----------------------------------------------------------------------------------------
- #pragma segment MADestructorRes
-
- TDesignator::~TDesignator()
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TDesignator::IDesignator:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRes
-
- void TDesignator::IDesignator()
- {
- this->IObject();
- } // TDesignator::IDesignator
-
- //----------------------------------------------------------------------------------------
- // TDesignator::GetSize:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRes
-
- Size TDesignator::GetSize()
- {
- // this->SubClassResponsibility();
- return 0;
- } // TDesignator::GetSize
-
- //----------------------------------------------------------------------------------------
- // TDesignator::IsContained:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRes
-
- ContainmentType TDesignator::IsContained(TDesignator*/* aDesignator */ )
- {
- // this->SubclassResponsibility();
- return kNotContained;
- } // TDesignator::IsContained
-
- //----------------------------------------------------------------------------------------
- // TDesignator::IsEmpty:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRes
-
- Boolean TDesignator::IsEmpty()
- {
- return this->GetSize() <= 0; // empty if nothing designated
- } // TDesignator::IsEmpty
-
-
- //========================================================================================
- // CLASS TLinearDesignator
- //========================================================================================
- #undef Inherited
- #define Inherited TDesignator
-
- #pragma segment MADesignatorNonRes
- MA_DEFINE_CLASS_M1(TLinearDesignator, Inherited);
-
- //----------------------------------------------------------------------------------------
- // TLinearDesignator: Empty constructor to satisfy the compiler.
- //----------------------------------------------------------------------------------------
- #pragma segment ConstructorRes
-
- TLinearDesignator::TLinearDesignator()
- {
- fStartPos = 0;
- fEndPos = 0;
- } // TLinearDesignator::TLinearDesignator
-
- //----------------------------------------------------------------------------------------
- // TLinearDesignator destructor
- //----------------------------------------------------------------------------------------
- #pragma segment MADestructorRes
-
- TLinearDesignator::~TLinearDesignator()
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TLinearDesignator::ILinearDesignator:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRes
-
- void TLinearDesignator::ILinearDesignator(long startPos,
- long endPos)
- {
- this->IDesignator();
-
- fStartPos = startPos;
- fEndPos = endPos;
- } // TLinearDesignator::ILinearDesignator
-
- //----------------------------------------------------------------------------------------
- // TLinearDesignator::GetStandardSignature:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorWrite
-
- IDType TLinearDesignator::GetStandardSignature()
- {
- return kLinearDesignator;
- } // TLinearDesignator::GetStandardSignature
-
- //----------------------------------------------------------------------------------------
- // TLinearDesignator::GetSize:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorNonRes
-
- Size TLinearDesignator::GetSize()
- {
- return (Size)(fEndPos - fStartPos);
- } // TLinearDesignator::GetSize
-
- //----------------------------------------------------------------------------------------
- // TLinearDesignator::ReadFrom:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRead
-
- void TLinearDesignator::ReadFrom(TStream* aStream)
- {
- Inherited::ReadFrom(aStream);
-
- fStartPos = aStream->ReadLong();
- fEndPos = aStream->ReadLong();
- } // TLinearDesignator::ReadFrom
-
- //----------------------------------------------------------------------------------------
- // TLinearDesignator::WriteTo:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorWrite
-
- void TLinearDesignator::WriteTo(TStream* aStream)// override
- {
- Inherited::WriteTo(aStream);
-
- aStream->WriteLong(fStartPos);
- aStream->WriteLong(fEndPos);
- } // TLinearDesignator::WriteTo
-
- //----------------------------------------------------------------------------------------
- // TLinearDesignator::IsContained:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorNonRes
-
- ContainmentType TLinearDesignator::IsContained(TDesignator* aDesignator)
- {
- #if qDebug
- if (aDesignator && !aDesignator->DescendsFrom(TLinearDesignator::GetClassDescStatic()))
- ProgramBreak("The containing designator for the TLinearDesignator is not of the same class");
- #endif
-
- if (aDesignator)
- {
- long itsStartPos;
- long itsEndPos;
-
- itsStartPos = ((TLinearDesignator *)aDesignator)->fStartPos;
- itsEndPos = ((TLinearDesignator *)aDesignator)->fEndPos;
-
- // Are we designating the data in the other direction? If so switch for the test.
- if (itsStartPos > itsEndPos)
- {
- itsStartPos = itsEndPos;
- itsEndPos = ((TLinearDesignator *)aDesignator)->fStartPos;
- }
-
- if ((fStartPos == itsStartPos) && (fEndPos == itsEndPos))
- return kExactlyContained;
- else if ((fStartPos <= itsStartPos) && (fEndPos >= itsEndPos))
- return kFullyContained;
- else if (((fStartPos <= itsStartPos) && (fEndPos >= itsStartPos)) || ((fStartPos <= itsEndPos) && (fEndPos >= itsEndPos)))
- return kPartiallyContained;
- }
- return kNotContained;
- } // TLinearDesignator::IsContained
-
-
- //========================================================================================
- // CLASS TVRectDesignator
- //========================================================================================
- #undef Inherited
- #define Inherited TDesignator
-
- #pragma segment MADesignatorNonRes
- MA_DEFINE_CLASS_M1(TVRectDesignator, Inherited);
-
- //----------------------------------------------------------------------------------------
- // TVRectDesignator constructor
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRes
-
- TVRectDesignator::TVRectDesignator()
- {
- fDesignation = gZeroVRect;
- } // TVRectDesignator::TVRectDesignator
-
- //----------------------------------------------------------------------------------------
- // TVRectDesignator destructor
- //----------------------------------------------------------------------------------------
- #pragma segment MADestructorRes
-
- TVRectDesignator::~TVRectDesignator()
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TVRectDesignator::IVRectDesignator:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRes
-
- void TVRectDesignator::IVRectDesignator(const VRect& itsDesignation)
- {
- this->IDesignator();
-
- fDesignation = itsDesignation;
- } // TVRectDesignator::IVRectDesignator
-
- //----------------------------------------------------------------------------------------
- // TVRectDesignator::GetStandardSignature:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorWrite
-
- IDType TVRectDesignator::GetStandardSignature()
- {
- return kVRectDesignator;
- } // TVRectDesignator::GetStandardSignature
-
- //----------------------------------------------------------------------------------------
- // TVRectDesignator::GetSize:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorNonRes
-
- Size TVRectDesignator::GetSize()
- {
- return (fDesignation.GetLength(vSel)) * (fDesignation.GetLength(hSel));
- } // TVRectDesignator::GetSize
-
- //----------------------------------------------------------------------------------------
- // TVRectDesignator::ReadFrom:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRead
-
- void TVRectDesignator::ReadFrom(TStream* aStream)
- {
- Inherited::ReadFrom(aStream);
-
- VRect itsDesignation;
- aStream->ReadVRect(itsDesignation);
- fDesignation = itsDesignation;
- } // TVRectDesignator::ReadFrom
-
- //----------------------------------------------------------------------------------------
- // TVRectDesignator::WriteTo:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorWrite
-
- void TVRectDesignator::WriteTo(TStream* aStream)// override
- {
- Inherited::WriteTo(aStream);
-
- VRect itsDesignation(fDesignation);
- aStream->WriteVRect(itsDesignation);
- } // TVRectDesignator::WriteTo
-
- //----------------------------------------------------------------------------------------
- // TVRectDesignator::IsContained:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorNonRes
-
- ContainmentType TVRectDesignator::IsContained(TDesignator* aDesignator)
- {
- #if qDebug
- if (aDesignator && !aDesignator->DescendsFrom(TVRectDesignator::GetClassDescStatic()))
- ProgramBreak("The containing designator for the TVRectDesignator is not of the same class");
- #endif
-
- if (aDesignator)
- {
- VRect itsVRect = ((TVRectDesignator *)aDesignator)->fDesignation;
-
- if (fDesignation == itsVRect)
- return kExactlyContained;
- else
- {
- VRect dstRect = fDesignation & itsVRect;
- if (!dstRect.Empty())
- if (dstRect == itsVRect)
- return kFullyContained;
- else
- return kPartiallyContained;
- }
- }
- return kNotContained;
- } // TVRectDesignator::IsContained
-
-
- //========================================================================================
- // CLASS TRegionDesignator
- //========================================================================================
- #undef Inherited
- #define Inherited TDesignator
-
- #pragma segment MADesignatorNonRes
- MA_DEFINE_CLASS_M1(TRegionDesignator, Inherited);
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator constructor
- //----------------------------------------------------------------------------------------
- #pragma segment ConstructorRes
-
- TRegionDesignator::TRegionDesignator()
- {
- fDesignation = NULL;
- fFreeRegionOnFree = TRUE;
- } // TRegionDesignator::TRegionDesignator
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator::IRegionDesignator:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRes
-
- void TRegionDesignator::IRegionDesignator(RgnHandle itsDesignation,
- Boolean freeRegionOnFree)
- {
- this->IDesignator();
-
- // Either assign the designation, or create it.
- if (itsDesignation)
- fDesignation = itsDesignation;
- else
- {
- FailInfo fi;
- Try(fi)
- {
- fDesignation = MakeNewRgn();
- fi.Success();
- }
- else // Recover
- {
- this->Free();
- fi.ReSignal();
- }
- }
-
- fFreeRegionOnFree = freeRegionOnFree;
- } // TRegionDesignator::IRegionDesignator
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator::ReadFrom:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorRead
-
- void TRegionDesignator::ReadFrom(TStream* aStream)
- {
- Inherited::ReadFrom(aStream);
-
- if (!fDesignation)
- fDesignation = (RgnHandle)aStream->ReadHandle();
- else
- {
- // read the size of the handle in from the stream
- Size itsSize = aStream->ReadLong();
-
- MAVolatileInit(SignedByte, savedState, 0);
-
- // increase the handle appropriately
- SetPermHandleSize((Handle) fDesignation, itsSize);
-
- FailInfo fi;
- Try(fi)
- {
- // lock the handle and read into it from the stream
- savedState = LockHandle((Handle) fDesignation);
- FailMemError();
- aStream->ReadBytes(*((Handle) fDesignation), itsSize);
- HSetState((Handle) fDesignation, savedState);
- fi.Success();
- }
- else // Recover
- {
- HSetState((Handle) fDesignation, savedState);
- fi.ReSignal();
- }
- }
- } // TRegionDesignator::ReadFrom
-
-
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator::WriteTo:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorWrite
-
- void TRegionDesignator::WriteTo(TStream* aStream)// override
- {
- Inherited::WriteTo(aStream);
-
- aStream->WriteHandle((Handle) fDesignation);
- } // TRegionDesignator::WriteTo
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator::Clone:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorNonRes
-
- TObject* TRegionDesignator::Clone() // override
- {
- MAVolatileInit(TRegionDesignator*, aClonedRgnDesignator, (TRegionDesignator *)Inherited::Clone());
-
- FailInfo fi;
- Try(fi)
- {
- aClonedRgnDesignator->fDesignation = NULL;// so failure handler works
- aClonedRgnDesignator->fDesignation = MakeNewRgn();
- CopyRgn(fDesignation, aClonedRgnDesignator->fDesignation);
-
- fi.Success();
- }
- else // Recover
- {
- aClonedRgnDesignator = (TRegionDesignator *)FreeIfObject(aClonedRgnDesignator);
-
- fi.ReSignal();
- }
-
- return aClonedRgnDesignator;
- } // TRegionDesignator::Clone
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator::GetSize:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorNonRes
-
- Size TRegionDesignator::GetSize()
- {
- if (fDesignation)
- {
- if (EmptyRgn(fDesignation))
- return 0;
- else
- {
- CRect rgnBBox((*fDesignation)->rgnBBox);
- return (rgnBBox.GetLength(vSel) * rgnBBox.GetLength(hSel));
- }
- }
- else
- return 0;
- } // TRegionDesignator::GetSize
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator::IsContained:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorNonRes
-
- ContainmentType TRegionDesignator::IsContained(TDesignator* aDesignator)
- {
- #if qDebug
- if (aDesignator && !aDesignator->DescendsFrom(TRegionDesignator::GetClassDescStatic()))
- ProgramBreak("The containing designator for the TRegionDesignator is not of the same class");
- #endif
-
- if (aDesignator)
- {
- RgnHandle itsDesignation = ((TRegionDesignator *)aDesignator)->fDesignation;
-
- if (EqualRgn(fDesignation, itsDesignation))
- return kExactlyContained;
- else
- {
- CTemporaryRegion rRgn;
- SectRgn(fDesignation, itsDesignation, rRgn);
- if (!EmptyRgn(rRgn))
- if (EqualRgn(itsDesignation, rRgn))
- return kFullyContained;
- else
- return kPartiallyContained;
- }
- }
- return kNotContained;
- } // TRegionDesignator::IsContained
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator::Free:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorNonRes
-
- TRegionDesignator::~TRegionDesignator()
- {
- if (fFreeRegionOnFree)
- fDesignation = DisposeIfRgnHandle(fDesignation);
- } // TRegionDesignator::Free
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator::GetStandardSignature:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorWrite
-
- IDType TRegionDesignator::GetStandardSignature()
- {
- return kRegionDesignator;
- } // TRegionDesignator::GetStandardSignature
-
- //----------------------------------------------------------------------------------------
- // TRegionDesignator::SetDesignationRect:
- //----------------------------------------------------------------------------------------
- #pragma segment MADesignatorNonRes
-
- void TRegionDesignator::SetDesignationRect(const CRect& theDesignation)
- {
- RectRgn(fDesignation, theDesignation);
- } // TRegionDesignator::SetDesignationRect
-
- //----------------------------------------------------------------------------------------
- // End of UDesignator.cp
-
- #pragma segment Inline
-